
/**********************************************************************************\
** 文件名称: InitTask.c
** 创建人员: YCG
** 创建日期: 2019-01-16
** 文档描述:
** 版本代号: V0.1
** 版本说明: 初始版本
\********************************************************************************/
#include "InitTask.h"
#include "Messageout.h"
#include "MainTask.h"

#include "DPIMTask.h"
#include "PackTask.h"
#include "LLTask.h"
#include "AppTask.h"

/********************************任务相关的句柄********************************/
TaskHandle_t MessageTaskHandle;
TaskHandle_t MainTaskHandle;

TaskHandle_t DPIMTaskHandle;
TaskHandle_t PackTaskHandle;
TaskHandle_t LLTaskHandle;
TaskHandle_t AppTaskHandle;

/****************************软件定时器相关的句柄******************************/
TimerHandle_t KeyTimerHandle;


/*********************************其它句柄*************************************/
Flash_t * Flash;

FATFS* TF_FatFs;     //文件系统的工作区

/*******************************外部变量************************************/
extern SPI_HandleTypeDef hspi1;
extern RTC_HandleTypeDef hrtc;

extern TIM_HandleTypeDef htim14;

/*******************************内部函数************************************/
static void LedInit(void);
static void KeyInit(void);
static void SysTaskInit(void);
static void DPIMTaskInit(void);
static void SysTimerInit(void);

/*******************************************************************************
** 函数名称: StartAPPTask
** 功能描述: 初始化外部设备
** 参数说明: argument: [输入/出]
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2019-03-10
********************************************************************************/
void StartInitTask(void)
{
    // RTC_SetTime(20,52);      //设置时间
	  HAL_TIM_Base_Start_IT(&htim14);
	
    MX_USB_DEVICE_Init();     //USB设备初始化
    MX_FATFS_Init();          //FATFS文件系统初始化

	  TF_FatFs = MyMalloc(sizeof(FATFS));
	  f_mount(TF_FatFs,"",0);
 
    MessageOut_Init();        //信息输出函数初始化
    OLED_Init();              //OLED显示初始化

    //  Flash = Flash_Init(&hspi1, F_CS_GPIO_Port, F_CS_Pin);       //Flash芯片初始化
  
    LedInit();        //LED初始化
	
    KeyInit();        //按键初始化
	
    SysTaskInit();    //系统任务初始化
	
    DPIMTaskInit();   //DPIM协议栈初始化
	
    SysTimerInit();   //软件定时器初始化

    OLED_UPrintf(0, 0, "UWOC Start 789....");                   //OLED打印系统开始启动
    Uprintf("UWOC Start....\n");                                //串口打印系统开始启动

    vTaskDelete(NULL);                                          //任务初始化完成后删除当前任务
}

/*******************************************************************************
** 函数名称: LedInit
** 功能描述: 添加系统相关的LED
** 参数说明: None
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2019-05-07
********************************************************************************/
static void LedInit(void)
{

    LedAdd(LED0_GPIO_Port, LED0_Pin);   //添加LED0
    LedAdd(LED1_GPIO_Port, LED1_Pin);   //添加LED0
    LedAdd(LED2_GPIO_Port, LED2_Pin);   //添加LED0
    LedAdd(LED3_GPIO_Port, LED3_Pin);   //添加LED0

}

/*******************************************************************************
** 函数名称: KeyInit
** 功能描述: 添加系统相关的按键
** 参数说明: None
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2019-05-07
********************************************************************************/
static void KeyInit(void)
{
    KeyAdd(KEY0_GPIO_Port, KEY0_Pin, GPIO_PIN_SET, KEY_SHORT);  //添加按键0
    KeyAdd(KEY1_GPIO_Port, KEY1_Pin, GPIO_PIN_SET, KEY_SHORT);  //添加按键1
    KeyAdd(KEY2_GPIO_Port, KEY2_Pin, GPIO_PIN_SET, KEY_SHORT);  //添加按键2
    KeyAdd(KEY3_GPIO_Port, KEY3_Pin, GPIO_PIN_SET, KEY_SHORT);  //添加按键3
}

/*******************************************************************************
** 函数名称: SysTaskInit
** 功能描述: 添加系统相关的任务
** 参数说明: None
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2019-05-07
********************************************************************************/
static void SysTaskInit(void)
{
    xTaskCreate(MainTask,        //添加任务函数
                "MainTask",      //任务名称
                128,             //任务栈大小
                NULL,            //传入任务的参数
                2,               //任务优先级
                MainTaskHandle);  //任务句柄

    xTaskCreate(MessageTask,        //添加任务函数
                "MessageTask",      //任务名称
                128,             //任务栈大小
                NULL,            //传入任务的参数
                1,    //任务优先级
                MessageTaskHandle); //任务句柄
}

/*******************************************************************************
** 函数名称: DPIMTaskInit
** 功能描述: 添加协议栈相关的任务
** 参数说明: None
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2019-05-07
********************************************************************************/
static void DPIMTaskInit(void)
{
    uint8_t yPriority = configMAX_PRIORITIES - 1; //最大优先级

    xTaskCreate(DPIMTask,        //添加任务函数
                "DPIMTask",      //任务名称
                128,            //任务栈大小
                NULL,           //传入任务的参数
                yPriority--,    //任务优先级
                DPIMTaskHandle); //任务句柄

    xTaskCreate(PackTask,        //添加任务函数
                "PackTask",      //任务名称
                128,            //任务栈大小
                NULL,           //传入任务的参数
                yPriority--,    //任务优先级
                PackTaskHandle); //任务句柄

    xTaskCreate(LLTask,        //添加任务函数
                "LLTask",      //任务名称
                128,            //任务栈大小
                NULL,           //传入任务的参数
                yPriority--,    //任务优先级
                LLTaskHandle); //任务句柄

    xTaskCreate(AppTask,        //添加任务函数
                "AppTask",      //任务名称
                128,            //任务栈大小
                NULL,           //传入任务的参数
                yPriority--,    //任务优先级
                AppTaskHandle); //任务句柄
}

/*******************************************************************************
** 函数名称: SysTimerInit
** 功能描述: 添加相关的软件定时器
** 参数说明: None
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2019-05-07
********************************************************************************/
static void SysTimerInit(void)
{
    KeyTimerHandle = xTimerCreate("KeyTimer", 10, pdTRUE, NULL, KeyScan);    //创建按键定时器
	  xTimerStart(KeyTimerHandle,portMAX_DELAY);
}


/********************************End of File************************************/
